Security Django অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ওয়েব অ্যাপ্লিকেশনগুলোর জন্য একটি জনপ্রিয় ফ্রেমওয়ার্ক এবং যেকোনো নিরাপত্তা ত্রুটি আপনার অ্যাপ্লিকেশন এবং ব্যবহারকারীর তথ্যের জন্য ক্ষতিকর হতে পারে। Django একটি নিরাপদ ফ্রেমওয়ার্ক হিসেবে ডিজাইন করা হয়েছে, তবে কিছু নিরাপত্তা সুবিধা কাজে লাগানোর জন্য আপনাকে কিছু প্র্যাকটিস অনুসরণ করতে হবে।
এখানে Django এর সেরা নিরাপত্তা প্র্যাকটিসগুলো আলোচনা করা হলো, যা আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ করবে।
১. DEBUG Mode বন্ধ রাখা
প্রোডাকশন পরিবেশে DEBUG মোড বন্ধ রাখা অত্যন্ত গুরুত্বপূর্ণ। যদি DEBUG মোড চালু থাকে, তাহলে Django অ্যাপ্লিকেশন ত্রুটির বিস্তারিত তথ্য এবং স্ট্যাক ট্রেস ব্যবহারকারীদের দেখায়, যা আক্রমণকারীদের জন্য নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে।
settings.py এ DEBUG বন্ধ করুন:
# settings.py
DEBUG = False
এছাড়া, যখন DEBUG = False হয়, তখন আপনাকে ALLOWED_HOSTS সেটিংকেও কনফিগার করতে হবে:
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
এটি Django কে বলে যে, কেবলমাত্র নির্দিষ্ট hosts থেকেই অ্যাপ্লিকেশনটি অ্যাক্সেস করা যেতে পারে।
২. Cross-Site Request Forgery (CSRF) প্রতিরোধ
Django ডিফল্টভাবে CSRF protection সক্রিয় থাকে, যা Cross-Site Request Forgery আক্রমণ থেকে রক্ষা করে। তবে, আপনি নিশ্চিত করতে পারেন যে আপনার ফর্ম এবং রিকোয়েস্টগুলিতে CSRF token সঠিকভাবে ব্যবহার হচ্ছে।
CSRF token ব্যবহার:
প্রতিটি ফর্মে {% csrf_token %} টেমপ্লেট ট্যাগ ব্যবহার করতে হবে:
<form method="post">
{% csrf_token %}
<!-- Form fields here -->
<input type="submit" value="Submit">
</form>
এছাড়া, যেকোনো AJAX রিকোয়েস্টের সাথে CSRF token পাঠানো উচিত। Django সাধারণত এটি হ্যান্ডেল করে, তবে আপনি নিজে manual ভাবে CSRF token পাঠাতে পারেন।
৩. SQL Injection প্রতিরোধ
Django এর ORM (Object-Relational Mapping) স্বয়ংক্রিয়ভাবে SQL ইনজেকশন প্রতিরোধ করে। তবে আপনি যদি কাস্টম SQL কুয়েরি ব্যবহার করেন, তাহলে আপনাকে সতর্ক থাকতে হবে।
Safe Query ব্যবহার করুন:
Django ORM এর মাধ্যমে আপনি safe queries ব্যবহার করুন। উদাহরণস্বরূপ:
# Unsafe (Direct SQL Query)
cursor.execute("SELECT * FROM table WHERE name = '" + user_input + "'")
# Safe (Using Parameters)
cursor.execute("SELECT * FROM table WHERE name = %s", [user_input])
এটি SQL Injection আক্রমণের বিরুদ্ধে সুরক্ষা প্রদান করে, কারণ Django স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন করে।
৪. Sensitive Data নিরাপদে সংরক্ষণ
Password এবং অন্যান্য সংবেদনশীল তথ্য securely সংরক্ষণ করা উচিত। Django ডিফল্টভাবে hashed password সংরক্ষণ করে, যা একটি নিরাপদ পদ্ধতি।
পাসওয়ার্ড হ্যাশিং:
Django ডিফল্টভাবে PBKDF2 hashing algorithm ব্যবহার করে পাসওয়ার্ড সংরক্ষণ করে। আপনি অন্য hashing algorithms যেমন bcrypt বা argon2 ব্যবহার করতে পারেন, তবে আপনাকে নিশ্চিত করতে হবে যে পাসওয়ার্ড হ্যাশিং শক্তিশালী এবং সুরক্ষিত।
# settings.py
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
]
এছাড়া, কখনও সরাসরি পাসওয়ার্ড বা টোকেন স্টোর করবেন না। পরিবর্তে, সেগুলিকে হ্যাশ করে এবং সুরক্ষিতভাবে সংরক্ষণ করুন।
৫. Clickjacking প্রতিরোধ
Clickjacking আক্রমণ থেকে সুরক্ষা নিশ্চিত করার জন্য Django এর X-Frame-Options মডিফায়ার ব্যবহার করা উচিত, যা ব্রাউজারকে বলে যে, কোনো নির্দিষ্ট পৃষ্ঠা বা ইউআরএল iframe এর মধ্যে লোড করা যাবে না।
X-Frame-Options কনফিগারেশন:
# settings.py
X_FRAME_OPTIONS = 'DENY' # অথবা 'SAMEORIGIN'
এটি নিশ্চিত করবে যে, আপনার অ্যাপ্লিকেশনটি অন্য কোনো সাইটের iframe এ লোড করা যাবে না, যা clickjacking আক্রমণ প্রতিরোধে সাহায্য করবে।
৬. Cross-Site Scripting (XSS) প্রতিরোধ
Django এর টেমপ্লেট ইঞ্জিন স্বয়ংক্রিয়ভাবে HTML escaping করে, যার মাধ্যমে Cross-Site Scripting (XSS) আক্রমণ প্রতিরোধ করা যায়। এটি নিশ্চিত করে যে ইউজার ইনপুট HTML বা JavaScript কোড হিসেবে রেন্ডার হবে না, বরং সাধারণ টেক্সট হিসেবে প্রদর্শিত হবে।
HTML escaping নিশ্চিত করা:
ডিফল্টভাবে, Django টেমপ্লেট সিস্টেম HTML escaping সক্রিয় রাখে, তবে যদি আপনি কোনও ভেরিয়েবল সরাসরি ইনপুট হিসেবে রেন্ডার করতে চান, তাহলে {% autoescape off %} ট্যাগ ব্যবহার করতে হবে।
<!-- Safe -->
<p>{{ user_input }}</p>
<!-- Unsafe (HTML will be rendered) -->
{% autoescape off %}
<p>{{ user_input }}</p>
{% endautoescape %}
এটি নিশ্চিত করবে যে HTML ট্যাগগুলি ইউজারের ইনপুট থেকে রেন্ডার হবে না।
৭. Secure Cookies ব্যবহার
আপনার অ্যাপ্লিকেশনটি সুরক্ষিত cookies ব্যবহার করতে পারে যাতে কুকির মান পরিবর্তন বা চুরি না করা যায়। Django তে secure এবং HttpOnly কুকি সেট করা সহজ।
Secure Cookies:
# settings.py
SESSION_COOKIE_SECURE = True # only send cookies over HTTPS
CSRF_COOKIE_SECURE = True # only send CSRF cookies over HTTPS
SESSION_COOKIE_HTTPONLY = True # disallow JavaScript access to cookies
এটি কুকির নিরাপত্তা বাড়াতে সাহায্য করবে, বিশেষত HTTPS ব্যবহারের সময়।
৮. Security Headers ব্যবহার
Django তে বিভিন্ন ধরনের HTTP security headers ব্যবহার করা যেতে পারে, যেমন Content-Security-Policy, Strict-Transport-Security ইত্যাদি, যা আপনার অ্যাপ্লিকেশনকে অতিরিক্ত নিরাপত্তা প্রদান করবে।
Example Headers:
# settings.py
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_HSTS_SECONDS = 31536000 # Enable HTTP Strict Transport Security
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
৯. Two-Factor Authentication (2FA)
যদি আপনার অ্যাপ্লিকেশনটি উচ্চ নিরাপত্তা চায়, তবে Two-Factor Authentication (2FA) যোগ করার কথা ভাবুন। Django এর জন্য 2FA যোগ করার জন্য আপনি django-otp বা django-allauth ব্যবহার করতে পারেন।
সারাংশ
Django তে সুরক্ষা নিশ্চিত করতে, আপনাকে কিছু গুরুত্বপূর্ণ ব্যবস্থা নিতে হবে যেমন DEBUG mode বন্ধ রাখা, CSRF এবং XSS প্রতিরোধ করা, password hashing ব্যবহার করা, এবং নিরাপদ cookies নিশ্চিত করা। সঠিকভাবে এই নিরাপত্তা প্র্যাকটিসগুলো অনুসরণ করলে আপনার Django অ্যাপ্লিকেশন আরও নিরাপদ হবে এবং আক্রমণকারীদের থেকে রক্ষা পাবে।
Read more